package algo_lignes_sites.params.param_component;

import commons.params.param_component.AbstractParamComponent_table;
import algo_lignes_sites.params.Params_ls;
import algo_lignes_sites.params.ParamsManager_ls;
import commons.data.EchelleGeneralization;
import java.util.ArrayList;
import javax.swing.JComponent;


public class ParamComponent_table_EchelleParticuliere extends AbstractParamComponent_table {

	public ParamComponent_table_EchelleParticuliere(String name, ParamsManager_ls paramsManager, JComponent component, boolean bCanBeNull) {
		super(name, paramsManager, component, bCanBeNull,
				new String[] {"Nom zone", "Catégorie Ligne", "Catégorie Noeud", "Echelle"},
				new String[] {"nomZone", "categorieLigne", "categorieNoeud", "echelle"},
				new Class[] {String.class, String.class, String.class, String.class});
	}

	// Appelée à la fin par ParamsManager afin de constituer le Params
	// l'argument params permet de retrouver certains objets déjà lus, via leur nom
	//  (les zones et les catégories)
	public ArrayList<EchelleGeneralization> getVEchelleParamParticuliere_path(Params_ls params) {
		ArrayList<EchelleGeneralization> vEGP = new ArrayList<EchelleGeneralization>();

		// RMQ :
		// La règle de généralisation principale (zone principale - échelle principale - filtres principaux)
		//  est ajoutée en début de vecteur par ParamsManager, juste avant l'appel à cette fonction.
		for (int numRow = 0; numRow <data.size() ; numRow++) {
			Object[] rowData = data.get(numRow);
			EchelleGeneralization rg = new EchelleGeneralization(
								params.getZoneByName((String) rowData[0]),
								params.getCategoryPathByName((String) rowData[1]),
								Double.parseDouble((String) rowData[3])
								);
			vEGP.add(rg);
		}
		return vEGP;
	}
	public ArrayList<EchelleGeneralization> getVEchelleParamParticuliere_node(Params_ls params) {
		ArrayList<EchelleGeneralization> vEGP = new ArrayList<EchelleGeneralization>();

		// RMQ :
		// La règle de généralisation principale (zone principale - échelle principale - filtres principaux)
		//  est ajoutée en début de vecteur par ParamsManager, juste avant l'appel à cette fonction.
		for (int numRow = 0; numRow <data.size() ; numRow++) {
			Object[] rowData = data.get(numRow);
			EchelleGeneralization rg = new EchelleGeneralization(
								params.getZoneByName((String) rowData[0]),
								params.getCategoryNodeByName((String) rowData[2]),
								Double.parseDouble((String) rowData[3])
								);
			vEGP.add(rg);
		}
		return vEGP;
	}

	//**************************************************************************
	//**************************************************************************

	public void makeStandardControls() {
		
		// Test si la table peut etre vide
		if (!bCanBeNull && bIsNull) {
			invalidateComponent("Il est obligatoire de déclarer des échelles particulières", true);
			return;
		}

		assert possibleValues[0] != null && possibleValues[1] != null &&possibleValues[2] != null;

		beginControls();

		// Parcourt des row
		for (int numRow = 0; numRow <data.size() ; numRow++) {

			//***** Nom de la zone *********************************************
			basicCheck (numRow, 0);

			//**** Categorie de ligne et noeud *********************************
			basicCheck_canBeNull(numRow, 1);
			basicCheck_canBeNull(numRow, 2);

			// on ne peut pas avoir les 2 catégories vide, il en faut au moins une de renseignée
			String catPath = (String) data.get(numRow)[1];
			String catNode = (String) data.get(numRow)[2];
			if ((catPath==null || catPath.length()==0) && (catNode==null || catNode.length()==0)) {
				addError(numRow, 1, "Il faut renseigner a minima une catégorie de Ligne OU une catégorie de Noeud");
				addError(numRow, 2, "Il faut renseigner a minima une catégorie de Ligne OU une catégorie de Noeud");
			}

			//***** Echelle ****************************************************
			basicCheck_IntPos(numRow, 3);
		}

		finaliseControls();
	}

}
